home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 34.zip / BS1 part 34 / GFA basic training.adf / Requester / EDITBOX.LST < prev    next >
File List  |  1989-06-01  |  10KB  |  312 lines

  1. @aufruf
  2. > PROCEDURE aufruf
  3.   n|=5
  4.   DIM text$(n|)
  5.   text$(1)="Name"
  6.   text$(2)="Vorname"
  7.   text$(3)="Straße"
  8.   text$(4)="Postleitzahl"
  9.   text$(5)="Stadt"
  10.   '
  11.   PRINT "0123456789"            !Dieser Block
  12.   PRINT "0123456789"            !dient nur
  13.   PRINT "0123456789"            !zur Demonstration
  14.   PRINT "0123456789"            !der
  15.   GET 0,0,80,32,grafik$         !Hintergrundrestaurierung
  16.   CLS                           !und kann
  17.   FOR j=1 TO 5                  !gelöscht werden
  18.     FOR i=1 TO 6
  19.       PUT i*80,j*32,grafik$
  20.     NEXT i
  21.   NEXT j
  22.   '
  23.   @edit_box(100,35,"Geben Sie nun Ihre Adresse ein!",90,35,n|,text$())
  24.   '
  25.   FOR i=1 TO n|
  26.     PRINT edit$(i),LEN(edit$(i))
  27.   NEXT i
  28.   '
  29.   REPEAT
  30.   UNTIL MOUSEK=1 OR INKEY$=CHR$(13)
  31. RETURN
  32. '
  33. > PROCEDURE edit_box(x%,y|,u$,g_x%,g_y|,n|,VAR text$())
  34.   LOCAL ma|,t_breite%,u_breite%,f_breite%,b_breite%,b_hÖhe%,hintergrund$
  35.   LOCAL i|,j|,e_x%,e_y|,ex%,xl1%,xl2%,yl1|,yl2|,xr1%,xr2%,yr1|,yr2|,char|
  36.   LOCAL zeichen&,zeile|,spalte|,taste$,taste|,ende!,cursor$,rechts|,abbruch!
  37.   DIM edit$(n|),edit|(n|,100),zeiger_c|(n|),zeiger_z|(SUCC(n|))
  38.   abbruch!=FALSE
  39.   ende!=FALSE
  40.   '
  41.   ma|=LEN(text$(1))
  42.   FOR i|=2 TO n|
  43.     ma|=MAX(ma|,LEN(text$(i|)))
  44.   NEXT i|
  45.   MUL ma|,8
  46.   '
  47.   t_breite%=10+ma|+16+15*8+10
  48.   u_breite%=LEN(u$)*8
  49.   f_breite%=2*144+8+30
  50.   b_breite%=MAX(t_breite%,u_breite%+10,f_breite%+30,g_x%+10)
  51.   b_hÖhe%=(12+10)+g_y|+(n|*12)+(12+20)
  52.   '
  53.   GET x%,y|,x%+b_breite%+6,y|+b_hÖhe%+4,hintergrund$
  54.   COLOR 0
  55.   PBOX x%,y|,x%+b_breite%+6,y|+b_hÖhe%+4
  56.   COLOR 1
  57.   '
  58.   BOX x%,y|,x%+b_breite%+6,y|+b_hÖhe%+4
  59.   BOX x%+3,y|+2,x%+b_breite%+3,y|+b_hÖhe%+2
  60.   ADD x%,3
  61.   ADD y|,2
  62.   '
  63.   BOX x%+b_breite%/2-(LEN(u$)*8)/2-2,y|+5,x%+b_breite%/2+(LEN(u$)*8)/2+2,y|+17
  64.   TEXT x%+b_breite%/2-(LEN(u$)*8)/2,y|+14,u$
  65.   '
  66.   IF g_x%>0
  67.     PUT x%+b_breite%/2-g_x%/2,y|+22,grafik$
  68.   ENDIF
  69.   '
  70.   e_y|=y|+22+g_y|+13
  71.   e_x%=x%+10+ma|+15
  72.   FOR i|=0 TO n|-1
  73.     TEXT x%+10,e_y|+i|*12,text$(i|+1)+":"
  74.   NEXT i|
  75.   '
  76.   ADD e_y|,2
  77.   FOR i|=0 TO n|-1
  78.     ex%=e_x%
  79.     REPEAT
  80.       INC zeichen&
  81.       TEXT ex%,e_y|+i|*12,"_"
  82.       ADD ex%,9
  83.     UNTIL ex%>x%+b_breite%-18
  84.   NEXT i|
  85.   DIV zeichen&,n|
  86.   SUB e_y|,2
  87.   '
  88.   xl1%=x%+10
  89.   xl2%=x%+154
  90.   yl1|=y|+b_hÖhe%-22
  91.   yl2|=y|+b_hÖhe%-10
  92.   xr1%=x%+b_breite%-164
  93.   xr2%=x%+b_breite%-10
  94.   yr1|=y|+b_hÖhe%-22
  95.   yr2|=y|+b_hÖhe%-10
  96.   '
  97.   BOX xl1%,yl1|,xl2%,yl2|
  98.   BOX xr1%,yr1|,xr2%,yr2|
  99.   TEXT xl1%+4,yl2|-3,"Eingabe abbrechen"
  100.   TEXT xr1%+4,yl2|-3,"Eingabe bestätigen"
  101.   '
  102.   COLOR 3
  103.   PBOX e_x%,e_y|-7,e_x%+7,e_y|+1
  104.   GET e_x%,e_y|-7,e_x%+7,e_y|+1,cursor$
  105.   COLOR 1
  106.   zeile|=1
  107.   spalte|=1
  108.   @e_box
  109.   PUT x%-3,y|-2,hintergrund$
  110.   '
  111.   IF NOT abbruch!
  112.     FOR i|=1 TO n|
  113.       IF zeiger_z|(i|)
  114.         FOR j|=0 TO PRED(zeiger_z|(i|))
  115.           edit$(i|)=edit$(i|)+CHR$(edit|(i|,j|))
  116.         NEXT j|
  117.       ENDIF
  118.     NEXT i|
  119.   ENDIF
  120.   '
  121.   ERASE edit|(),zeiger_c|(),zeiger_z|()
  122. RETURN
  123. > PROCEDURE e_box
  124.   REPEAT
  125.     taste$=INKEY$
  126.     IF MOUSEX>xl1% AND MOUSEX<xl2% AND MOUSEY>yl1| AND MOUSEY<yl2| AND MOUSEK=1
  127.       abbruch!=TRUE
  128.       ende!=TRUE
  129.     ELSE IF MOUSEX>xr1% AND MOUSEX<xr2% AND MOUSEY>yr1| AND MOUSEY<yr2| AND MOUSEK=1
  130.       ende!=TRUE
  131.     ELSE IF taste$<>""
  132.       IF LEN(taste$)=1
  133.         taste|=ASC(taste$)
  134.       ELSE IF LEN(taste$)=2
  135.         taste|=ASC(RIGHT$(taste$))
  136.         SUB taste|,64
  137.       ELSE IF LEN(taste$)>2
  138.         taste|=0
  139.       ENDIF
  140.       SELECT taste|
  141.       CASE 1 !Cursor up
  142.         IF zeile|>1
  143.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  144.           DEC zeile|
  145.           IF zeiger_z|(zeile|)<zeichen&
  146.             spalte|=MIN(SUCC(zeiger_z|(zeile|)),spalte|)
  147.             zeiger_c|(zeile|)=PRED(spalte|)
  148.           ELSE
  149.             @eintrag_neu
  150.           ENDIF
  151.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  152.         ENDIF
  153.       CASE 2 !Cursor down
  154.         IF zeile|<n|
  155.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  156.           INC zeile|
  157.           IF zeiger_z|(zeile|)<zeichen&
  158.             spalte|=MIN(SUCC(zeiger_z|(zeile|)),spalte|)
  159.             zeiger_c|(zeile|)=PRED(spalte|)
  160.           ELSE
  161.             @eintrag_neu
  162.           ENDIF
  163.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  164.         ENDIF
  165.       CASE 3 !Cursor right
  166.         IF zeiger_c|(zeile|)<zeiger_z|(zeile|)
  167.           IF spalte|<zeichen& AND spalte|<=zeiger_z|(zeile|)
  168.             ' Cursor vor Text und Feldende
  169.             PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  170.             INC spalte|
  171.             INC zeiger_c|(zeile|)
  172.             PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  173.           ELSE IF spalte|=zeichen& AND zeiger_c|(zeile|)<zeiger_z|(zeile|)
  174.             ' Cursor am Feldende und vor Textende
  175.             @shift(2,PRED(zeichen&),1,edit|(zeile|,zeiger_c|(zeile|)),PRED(zeichen&))
  176.             DEC rechts|
  177.             INC zeiger_c|(zeile|)
  178.           ENDIF
  179.         ENDIF
  180.       CASE 4 !Cursor left
  181.         IF spalte|>1
  182.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  183.           DEC spalte|
  184.           DEC zeiger_c|(zeile|)
  185.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  186.         ELSE IF spalte|=1 AND zeiger_c|(zeile|)>0
  187.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  188.           @shift(1,zeichen&-2,2,edit|(zeile|,PRED(zeiger_c|(zeile|))),1)
  189.           DEC zeiger_c|(zeile|)
  190.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  191.           IF zeiger_z|(zeile|)-zeiger_c|(zeile|)>=zeichen&
  192.             INC rechts|
  193.           ENDIF
  194.         ENDIF
  195.       CASE 13
  196.         IF zeile|=n|
  197.           ende!=TRUE
  198.         ELSE
  199.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  200.           INC zeile|
  201.           IF zeiger_z|(zeile|)<zeichen&
  202.             spalte|=1
  203.             zeiger_c|(zeile|)=0
  204.           ELSE
  205.             @eintrag_neu
  206.           ENDIF
  207.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  208.         ENDIF
  209.       CASE 8 !Backspace
  210.         IF spalte|>1 AND spalte|<zeichen&
  211.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  212.           IF rechts|
  213.             char|=edit|(zeile|,zeiger_z|(zeile|)-rechts|)
  214.             DEC rechts|
  215.           ELSE
  216.             char|=32
  217.           ENDIF
  218.           position|=PRED(zeichen&)
  219.           @shift(spalte|,PRED(zeichen&),PRED(spalte|),char|,position|)
  220.           @entf(zeile|,PRED(zeiger_c|(zeile|)),zeiger_z|(zeile|),edit|())
  221.           DEC zeiger_c|(zeile|)
  222.           DEC zeiger_z|(zeile|)
  223.           DEC spalte|
  224.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  225.         ENDIF
  226.       CASE 127 !Delete
  227.         IF spalte|<zeichen& AND zeiger_z|(zeile|)>zeiger_c|(zeile|)
  228.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  229.           IF rechts|
  230.             char|=edit|(zeile|,zeiger_z|(zeile|)-rechts|)
  231.             DEC rechts|
  232.           ELSE
  233.             char|=32
  234.           ENDIF
  235.           position|=PRED(zeichen&)
  236.           @shift(SUCC(spalte|),zeichen&-1,spalte|,char|,position|)
  237.           @entf(zeile|,zeiger_c|(zeile|),zeiger_z|(zeile|),edit|())
  238.           DEC zeiger_z|(zeile|)
  239.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  240.         ENDIF
  241.         '
  242.       CASE 32 TO 126,196 TO 252
  243.         IF zeiger_z|(zeile|)<100
  244.           IF zeiger_c|(zeile|)=zeiger_z|(zeile|) AND spalte|=zeichen&
  245.             ' Cursor am Textende und am Feldende
  246.             @shift(2,PRED(zeichen&),1,taste|,PRED(zeichen&))
  247.             edit|(zeile|,zeiger_z|(zeile|))=taste|
  248.           ELSE IF zeiger_c|(zeile|)=zeiger_z|(zeile|) AND spalte|<zeichen&
  249.             ' Cursor am Textende und vor Feldende
  250.             PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  251.             TEXT e_x%+PRED(spalte|)*9,(e_y|)+PRED(zeile|)*12,CHR$(taste|)
  252.             INC spalte|
  253.             PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  254.             edit|(zeile|,zeiger_z|(zeile|))=taste|
  255.           ELSE IF zeiger_c|(zeile|)<zeiger_z|(zeile|) AND spalte|=PRED(zeichen&)
  256.             ' Cursor im Text und am Feldende
  257.             PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  258.             @shift(2,PRED(spalte|),1,taste|,PRED(spalte|))
  259.             @einf(zeile|,zeiger_c|(zeile|),zeiger_z|(zeile|),taste|,edit|())
  260.             PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  261.           ELSE IF zeiger_c|(zeile|)<zeiger_z|(zeile|) AND spalte|<zeichen&
  262.             ' Cursor im Text und vor Feldende
  263.             PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  264.             @shift(spalte|,zeichen&-2,SUCC(spalte|),taste|,spalte|)
  265.             INC spalte|
  266.             PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  267.             @einf(zeile|,zeiger_c|(zeile|),zeiger_z|(zeile|),taste|,edit|())
  268.             IF zeiger_z|(zeile|)-zeiger_c|(zeile|)+spalte|>zeichen&
  269.               INC rechts|
  270.             ENDIF
  271.           ENDIF
  272.           INC zeiger_c|(zeile|)
  273.           INC zeiger_z|(zeile|)
  274.         ENDIF
  275.       ENDSELECT
  276.     ENDIF
  277.   UNTIL ende!=TRUE
  278. RETURN
  279. > PROCEDURE eintrag_neu
  280.   spalte|=1
  281.   zeiger_c|(zeile|)=0
  282.   DEFFILL 0
  283.   PBOX e_x%,e_y|-8+PRED(zeile|)*12,e_x%+9*zeichen&,e_y|+2+PRED(zeile|)*12
  284.   DEFFILL 1
  285.   SUB zeichen&,2
  286.   FOR i|=0 TO zeichen&
  287.     TEXT e_x%+i|*9,e_y|+PRED(zeile|)*12,CHR$(edit|(zeile|,i|))
  288.   NEXT i|
  289.   ADD zeichen&,2
  290.   rechts|=zeiger_z|(zeile|)-PRED(zeichen&)
  291. RETURN
  292. > PROCEDURE shift(erster|,letzter|,neu|,zeichen|,position|)
  293.   GET e_x%+PRED(erster|)*9,e_y|-7+PRED(zeile|)*12,e_x%-1+letzter|*9,e_y|+1+PRED(zeile|)*12,rettung$
  294.   PUT e_x%+PRED(neu|)*9,e_y|-7+PRED(zeile|)*12,rettung$
  295.   TEXT e_x%+PRED(position|)*9,e_y|+PRED(zeile|)*12,CHR$(zeichen|)
  296. RETURN
  297. > PROCEDURE entf(z|,s|,bis|,VAR a|())
  298.   REPEAT
  299.     a|(z|,s|)=a|(z|,SUCC(s|))
  300.     INC s|
  301.   UNTIL s|=>bis|
  302.   a|(z|,bis|)=0
  303. RETURN
  304. > PROCEDURE einf(z|,s|,bis|,wert_n|,VAR a|())
  305.   REPEAT
  306.     wert_a|=a|(z|,s|)
  307.     a|(z|,s|)=wert_n|
  308.     wert_n|=wert_a|
  309.     INC s|
  310.   UNTIL s|>bis|
  311. RETURN
  312.